﻿# -*- coding: utf-8 -*- 

#	文字コードをUTF-8に変換する
#	起動時にフォルダごと渡して中身のファイルを変換してもらう

import sys, os, glob
import codecs

def check_charset(data, check):
	f = lambda d, enc: d.decode(enc) and enc
	try:# BOM付きUTF-8
		check = 1
		return f(data, 'utf-8-sig')
	except: pass
	try:# BOM無しUTF-8
		check = 2
		return f(data, 'utf-8')
	except: pass
	try:
		check = 3
		return f(data, 'shift-jis')
	except: pass
	try:
		check = 3
		return f(data, 'euc-jp')
	except: pass
	try:
		check = 3
		return f(data, 'iso2022-jp')
	except: pass
	check = 0
	return None
	
	
def conv(data):
	print(type(data))
	check = 0
	charaset = check_charset(data, check)
	u = data.decode(charaset)
	print(type(u))
	if check == 1:
		return u
	elif check >= 2:
		return u.encode('utf-8-sig')
	else:
		return u


#-------------- 文字コードをコンバート ------------------
# とりあえず存在するファイルをすべて表示
def convert():
	for fileName in glob.glob("*.cpp"):
		obj = open(fileName, 'rU')	# ファイル読み出し
#		obj = codecs.open(fileName, 'rt', 'utf-8')
		print(type(obj))
		data = obj.read()	# ユニコードファイルがあるとエラー出る、、、
		obj.close()
		try:
			data = conv(data)
		except:
			print(fileName, '->skip')
			continue
		print(data)
#		BOM = [0xef, 0xbb, 0xbf]	# BOMの用意
#		char = ''
#		for cha in BOM:
#			char += chr(cha)
#		data.replace(char, '')	# BOMがもともとあったら一度削除
#		print(data)
#		input('push')
		# 書き込み用に開く
		fobj = open(fileName, 'w')
		# コンバートしたデータ書く前にBOM追加
#		for i in BOM:
#			fobj.write(chr(i))
		fobj.write(data)
		fobj.close()
		print(fileName, '->converted')
#		print fileName
	
#--------------------------------------------------------


